<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>

</html>
<script>
    //一.this
    //1.this的概念
    //this是Javascript语言的一个关键字。它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用。随着函数使用场合的不同,this的值会发生变化。但是有一个总的原则,那就是this指的是调用函数的那个对象。
    //谁调用此函数，this指向谁。
    //1.1.普通函数，自执行函数，函数表达式 - this指向window
    //严格模式，this指向undefined
    // "use strict";
    // function fn() {
    //     alert(this);
    // }
    // fn();
    // window.fn();//window
    // ! function() {
    //     alert(this);
    // }();
    // var fn1 = function() {
    //     alert(this);
    // }
    // fn1();

    //1.2.对象中的this和事件处理函数中的this都是指向当前操作的对象(元素对象) - 应用的核心
    // var obj = {
    //     name: 'zhangsan',
    //     showname: function() {
    //         console.log(this.name);
    //     }
    // }
    // obj.showname(); //zhangsan

    // document.onclick = function() {
    //     console.log(this); //document
    // }

    // 主动触发
    // document.onclick();


    //1.3.回调函数：函数作为参数给另外一个函数。
    //回调函数内部的this指向window。
    // var arr = [12, 3, 4, 5];
    // arr.map(function() {
    //     console.log(this);
    // });
    // window.setInterval(function() {
    //     console.log(this);
    // }, 1000);
    // window.setTimeout(function() {
    //     console.log(this);
    // }, 1000);


    //1.4.构造函数(类)：首字母大写，new关键字调用。
    // 构造函数的this指向类创建出来的对象(实例对象)
    // function Fn() {
    //     alert(this);
    // }
    // Fn() //window
    // new Fn(); //[object Object] 指向类创建出来的对象(实例对象)
    // var f1 = new Fn(); //Fn:类，构造函数   f1:实例对象
    // var f2 = new Fn(); //Fn:类，构造函数   f2:实例对象
</script>